package tmp;

import lombok.Data;

/**
 * Created by dycong on 2017/8/19.
 */
@Data
public class Father implements Cloneable {

    private static String car;
    public static String house;
    private Integer age;
    public Integer age2;

    public Father() {
        //todo 初始化子类时，当在父类的构造方法调用一个被子类覆盖的方法的时候，再调用父类的构造时，调用的方法 print() 是子类的实现
        print();
    }

    protected void print() {
    }


    @Override
    public Father clone() throws CloneNotSupportedException {
        return (Father) super.clone();
    }

    /**
     *todo 覆盖（override）是在继承+多态的前提下的概念。Java中的静态方法不多态，所以不涉及覆盖，无论静态方法是在基类还是派生类上。
     *todo 从结果看，JVM中有4条invoke-*指令：invokevirtual、invokeinterface、invokestatic、invokespecial，其中前两条指令有多态语义而后两条没有。
     *todo 静态方法是用invokestatic来调用的，编译的时候就确定好具体用那个版本的方法了。private的成员方法是用invokespecial调用的，同样不多态。
     *todo 被调用的变量是接口的引用时，调用方法是用invokeinterface。其余的情况的成员方法用invokevirtual。

     * @see 静态方法被隐藏:静态方法的访问是根据当前对象的表面类型来决定,是由类调用的
     * @see 理论上静态方法，静态属性不应通过实例来使用，最后还是回到静态是类的属性
     * @see 子类可以与父类具有相同参数签名的同名方法，但不是覆盖关系，是个自类的属性（返回值必须一致）
     */
    public static String pop(){
        return Father.class.getName();
    }
}




